🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / feature / node / src / commonMain / kotlin / org / meshtastic / feature / node / list / NodeListViewModel.kt
Displaying Raw • Download
feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/list/NodeListViewModel.kt ea48859781afbe77d74a32b14459e227bf566c42 (ea488597) Text, 9.06 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.node.list
Tff7b72import T7ee787androidx.lifecycle.SavedStateHandle
Tff7b72import T7ee787androidx.lifecycle.ViewModel
Tff7b72import T7ee787androidx.lifecycle.viewModelScope
Tff7b72import T7ee787kotlinx.coroutines.flow.Flow
Tff7b72import T7ee787kotlinx.coroutines.flow.StateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.combine
Tff7b72import T7ee787kotlinx.coroutines.flow.flatMapLatest
Tff7b72import T7ee787kotlinx.coroutines.flow.map
Tff7b72import T7ee787kotlinx.coroutines.launch
Tff7b72import T7ee787org.koin.core.annotation.KoinViewModel
Tff7b72import T7ee787org.meshtastic.core.model.DataPacket
Tff7b72import T7ee787org.meshtastic.core.model.DeviceType
Tff7b72import T7ee787org.meshtastic.core.model.Node
Tff7b72import T7ee787org.meshtastic.core.model.NodeListDensity
Tff7b72import T7ee787org.meshtastic.core.model.NodeSortOption
Tff7b72import T7ee787org.meshtastic.core.model.RadioController
Tff7b72import T7ee787org.meshtastic.core.repository.NodeRepository
Tff7b72import T7ee787org.meshtastic.core.repository.RadioConfigRepository
Tff7b72import T7ee787org.meshtastic.core.repository.RadioInterfaceService
Tff7b72import T7ee787org.meshtastic.core.repository.ServiceRepository
Tff7b72import T7ee787org.meshtastic.core.ui.viewmodel.stateInWhileSubscribed
Tff7b72import T7ee787org.meshtastic.feature.node.detail.NodeManagementActions
Tff7b72import T7ee787org.meshtastic.feature.node.detail.NodeRequestActions
Tff7b72import T7ee787org.meshtastic.feature.node.domain.usecase.GetFilteredNodesUseCase
Tff7b72import T7ee787org.meshtastic.proto.ChannelSet
Tff7b72import T7ee787org.meshtastic.proto.Config
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongParameterListTa5d6ff"Tb4b4b4)
Tf0883e@KoinViewModel
Tff7b72class T56d364NodeListViewModelTb4b4b4(
Tff7b72private Tff7b72val Te6edf3savedStateHandleTb4b4b4: Te6edf3SavedStateHandleTb4b4b4,
Tff7b72private Tff7b72val Te6edf3nodeRepositoryTb4b4b4: Te6edf3NodeRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3radioConfigRepositoryTb4b4b4: Te6edf3RadioConfigRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3serviceRepositoryTb4b4b4: Te6edf3ServiceRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3radioControllerTb4b4b4: Te6edf3RadioControllerTb4b4b4,
Tff7b72private Tff7b72val Te6edf3radioInterfaceServiceTb4b4b4: Te6edf3RadioInterfaceServiceTb4b4b4,
Tff7b72val Te6edf3nodeManagementActionsTb4b4b4: Te6edf3NodeManagementActionsTb4b4b4,
Tff7b72private Tff7b72val Te6edf3nodeRequestActionsTb4b4b4: Te6edf3NodeRequestActionsTb4b4b4,
Tff7b72private Tff7b72val Te6edf3getFilteredNodesUseCaseTb4b4b4: Te6edf3GetFilteredNodesUseCaseTb4b4b4,
Tff7b72val Te6edf3nodeFilterPreferencesTb4b4b4: Te6edf3NodeFilterPreferencesTb4b4b4,
Tb4b4b4) Tb4b4b4: Te6edf3ViewModelTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3ourNodeInfoTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3Node?Tff7b72> Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3ourNodeInfo
Tff7b72val Te6edf3onlineNodeCount Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3onlineNodeCountTb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= T79c0ff0Tb4b4b4)
Tff7b72val Te6edf3totalNodeCount Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3totalNodeCountTb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= T79c0ff0Tb4b4b4)
Tff7b72val Te6edf3connectionState Tff7b72= Te6edf3serviceRepositoryTb4b4b4.Te6edf3connectionState
Tff7b72val Te6edf3deviceTypeTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3DeviceType?Tff7b72> Tff7b72=
Te6edf3radioInterfaceServiceTb4b4b4.Te6edf3currentDeviceAddressFlow
Tb4b4b4.Te6edf3map Tb4b4b4{ Te6edf3address Tff7b72-Tff7b72> Te6edf3addressTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3DeviceTypeTb4b4b4.Te6edf3fromAddressTb4b4b4(Tffa657itTb4b4b4) Tb4b4b4} Tb4b4b4}
Tb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Tff7b72nullTb4b4b4)
Tff7b72val Te6edf3nodeListDensityTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3NodeListDensityTff7b72> Tff7b72=
Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3nodeListDensity
Tb4b4b4.Te6edf3map Tb4b4b4{ Te6edf3name Tff7b72-Tff7b72> Te6edf3NodeListDensityTb4b4b4.Te6edf3fromNameTb4b4b4(Te6edf3nameTb4b4b4) Tb4b4b4}
Tb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Te6edf3NodeListDensityTb4b4b4.Te6edf3COMPLETETb4b4b4)
Tff7b72val Te6edf3shouldShowPower Tff7b72= Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3shouldShowPower
Tff7b72val Te6edf3shouldShowLastHeard Tff7b72= Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3shouldShowLastHeard
Tff7b72val Te6edf3lastHeardIsRelative Tff7b72= Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3lastHeardIsRelative
Tff7b72val Te6edf3shouldShowLocation Tff7b72= Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3shouldShowLocation
Tff7b72val Te6edf3shouldShowHops Tff7b72= Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3shouldShowHops
Tff7b72val Te6edf3shouldShowSignal Tff7b72= Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3shouldShowSignal
Tff7b72val Te6edf3shouldShowChannel Tff7b72= Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3shouldShowChannel
Tff7b72val Te6edf3shouldShowRole Tff7b72= Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3shouldShowRole
Tff7b72val Te6edf3shouldShowTelemetry Tff7b72= Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3shouldShowTelemetry
Tff7b72private Tff7b72val Te6edf3nodeSortOption Tff7b72= Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3nodeSortOption
Tff7b72private Tff7b72val Te6edf3_nodeFilterText Tff7b72= Te6edf3savedStateHandleTb4b4b4.Te6edf3getStateFlowTb4b4b4(Te6edf3KEY_FILTER_TEXTTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3filterToggles Tff7b72=
Te6edf3combineTb4b4b4(
Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3includeUnknownTb4b4b4,
Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3excludeInfrastructureTb4b4b4,
Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3onlyOnlineTb4b4b4,
Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3onlyDirectTb4b4b4,
Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3showIgnoredTb4b4b4,
Tb4b4b4) Tb4b4b4{ Te6edf3includeUnknownTb4b4b4, Te6edf3excludeInfrastructureTb4b4b4, Te6edf3onlyOnlineTb4b4b4, Te6edf3onlyDirectTb4b4b4, Te6edf3showIgnored Tff7b72-Tff7b72>
Te6edf3NodeFilterTogglesTb4b4b4(
Te6edf3includeUnknown Tff7b72= Te6edf3includeUnknownTb4b4b4,
Te6edf3excludeInfrastructure Tff7b72= Te6edf3excludeInfrastructureTb4b4b4,
Te6edf3onlyOnline Tff7b72= Te6edf3onlyOnlineTb4b4b4,
Te6edf3onlyDirect Tff7b72= Te6edf3onlyDirectTb4b4b4,
Te6edf3showIgnored Tff7b72= Te6edf3showIgnoredTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72private Tff7b72val Te6edf3nodeFilterTb4b4b4: Te6edf3FlowTff7b72<Te6edf3NodeFilterStateTff7b72> Tff7b72=
Te6edf3combineTb4b4b4(Te6edf3_nodeFilterTextTb4b4b4, Te6edf3filterTogglesTb4b4b4, Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3excludeMqttTb4b4b4) Tb4b4b4{
Te6edf3filterTextTb4b4b4,
Te6edf3filterTogglesTb4b4b4,
Te6edf3excludeMqttTb4b4b4,
Tff7b72-Tff7b72>
Te6edf3NodeFilterStateTb4b4b4(
Te6edf3filterText Tff7b72= Te6edf3filterTextTb4b4b4,
Te6edf3includeUnknown Tff7b72= Te6edf3filterTogglesTb4b4b4.Te6edf3includeUnknownTb4b4b4,
Te6edf3excludeInfrastructure Tff7b72= Te6edf3filterTogglesTb4b4b4.Te6edf3excludeInfrastructureTb4b4b4,
Te6edf3onlyOnline Tff7b72= Te6edf3filterTogglesTb4b4b4.Te6edf3onlyOnlineTb4b4b4,
Te6edf3onlyDirect Tff7b72= Te6edf3filterTogglesTb4b4b4.Te6edf3onlyDirectTb4b4b4,
Te6edf3showIgnored Tff7b72= Te6edf3filterTogglesTb4b4b4.Te6edf3showIgnoredTb4b4b4,
Te6edf3excludeMqtt Tff7b72= Te6edf3excludeMqttTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3nodesUiStateTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3NodesUiStateTff7b72> Tff7b72=
Te6edf3combineTb4b4b4(Te6edf3nodeSortOptionTb4b4b4, Te6edf3nodeFilterTb4b4b4, Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3deviceProfileFlowTb4b4b4) Tb4b4b4{ Te6edf3sortTb4b4b4, Te6edf3nodeFilterTb4b4b4, Te6edf3profile Tff7b72-Tff7b72>
Te6edf3NodesUiStateTb4b4b4(
Te6edf3sort Tff7b72= Te6edf3sortTb4b4b4,
Te6edf3filter Tff7b72= Te6edf3nodeFilterTb4b4b4,
Te6edf3distanceUnits Tff7b72= Te6edf3profileTb4b4b4.Te6edf3configTff7b72?.Te6edf3displayTff7b72?.Te6edf3unitsTff7b72?.Te6edf3value Tff7b72?: T79c0ff0Tb4b4b4,
Te6edf3tempInFahrenheit Tff7b72= Te6edf3profileTb4b4b4.Te6edf3module_configTff7b72?.Te6edf3telemetryTff7b72?.Te6edf3environment_display_fahrenheit Tff7b72?: Tff7b72falseTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Te6edf3NodesUiStateTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3nodeListTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3ListTff7b72<Te6edf3NodeTff7b72>Tff7b72> Tff7b72=
Te6edf3combineTb4b4b4(Te6edf3nodeFilterTb4b4b4, Te6edf3nodeSortOptionTb4b4b4, Tff7b72::Te6edf3PairTb4b4b4)
Tb4b4b4.Te6edf3flatMapLatest Tb4b4b4{ Tb4b4b4(Te6edf3filterTb4b4b4, Te6edf3sortTb4b4b4) Tff7b72-Tff7b72> Te6edf3getFilteredNodesUseCaseTb4b4b4.Te6edf3invokeTb4b4b4(Te6edf3filterTb4b4b4, Te6edf3sortTb4b4b4) Tb4b4b4}
Tb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3unfilteredNodeListTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3ListTff7b72<Te6edf3NodeTff7b72>Tff7b72> Tff7b72=
Te6edf3nodeRepositoryTb4b4b4.Te6edf3getNodesTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72var Te6edf3nodeFilterTextTb4b4b4: Tffa657String
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3_nodeFilterTextTb4b4b4.Te6edf3value
Tff7b72setTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Te6edf3savedStateHandleTff7b72[Te6edf3KEY_FILTER_TEXTTff7b72] Tff7b72= Te6edf3value
Tb4b4b4}
Tff7b72fun Td2a8ffsetSortOptionTb4b4b4(Te6edf3sortTb4b4b4: Te6edf3NodeSortOptionTb4b4b4) Tb4b4b4{
Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3setNodeSortTb4b4b4(Te6edf3sortTb4b4b4)
Tb4b4b4}
Tff7b72fun Td2a8ffsetChannelsTb4b4b4(Te6edf3channelSetTb4b4b4: Te6edf3ChannelSetTb4b4b4) Tff7b72= Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{
Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3replaceAllSettingsTb4b4b4(Te6edf3channelSetTb4b4b4.Te6edf3settingsTb4b4b4)
Tff7b72val Te6edf3newLoraConfig Tff7b72= Te6edf3channelSetTb4b4b4.Te6edf3lora_config
Tff7b72if Tb4b4b4(Te6edf3newLoraConfig Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3radioControllerTb4b4b4.Te6edf3setLocalConfigTb4b4b4(Te6edf3ConfigTb4b4b4(Te6edf3lora Tff7b72= Te6edf3newLoraConfigTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8fffavoriteNodeTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tff7b72= Te6edf3nodeManagementActionsTb4b4b4.Te6edf3requestFavoriteNodeTb4b4b4(Te6edf3viewModelScopeTb4b4b4, Te6edf3nodeTb4b4b4)
Tff7b72fun Td2a8ffignoreNodeTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tff7b72= Te6edf3nodeManagementActionsTb4b4b4.Te6edf3requestIgnoreNodeTb4b4b4(Te6edf3viewModelScopeTb4b4b4, Te6edf3nodeTb4b4b4)
Tff7b72fun Td2a8ffmuteNodeTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tff7b72= Te6edf3nodeManagementActionsTb4b4b4.Te6edf3requestMuteNodeTb4b4b4(Te6edf3viewModelScopeTb4b4b4, Te6edf3nodeTb4b4b4)
Tff7b72fun Td2a8ffremoveNodeTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tff7b72= Te6edf3nodeManagementActionsTb4b4b4.Te6edf3requestRemoveNodeTb4b4b4(Te6edf3viewModelScopeTb4b4b4, Te6edf3nodeTb4b4b4)
T8b949e/** Returns the contact key for navigating to a direct message conversation with this node. */
Tff7b72fun Td2a8ffgetDirectMessageRouteTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4)Tb4b4b4: Tffa657String Tb4b4b4{
Tff7b72val Te6edf3ourNode Tff7b72= Te6edf3ourNodeInfoTb4b4b4.Te6edf3value
Tff7b72val Te6edf3hasPKC Tff7b72= Te6edf3ourNodeTff7b72?.Te6edf3hasPKC Tff7b72=Tff7b72= Tff7b72true Tff7b72&Tff7b72& Te6edf3nodeTb4b4b4.Te6edf3hasPKC
Tff7b72val Te6edf3channel Tff7b72= Tff7b72if Tb4b4b4(Te6edf3hasPKCTb4b4b4) Te6edf3DataPacketTb4b4b4.Te6edf3PKC_CHANNEL_INDEX Tff7b72else Te6edf3nodeTb4b4b4.Te6edf3channel
Tff7b72return Ta5d6ff"Tffd700${Te6edf3channelTffd700}Tffd700${Te6edf3nodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3idTffd700}Ta5d6ff"
Tb4b4b4}
T8b949e/** Initiates a trace route request to the specified node. */
Tff7b72fun Td2a8fftraceRouteTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tb4b4b4{
Te6edf3nodeRequestActionsTb4b4b4.Te6edf3requestTracerouteTb4b4b4(Te6edf3viewModelScopeTb4b4b4, Te6edf3nodeTb4b4b4.Te6edf3numTb4b4b4, Te6edf3nodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3long_nameTb4b4b4)
Tb4b4b4}
Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72private Tff7b72const Tff7b72val Te6edf3KEY_FILTER_TEXT Tff7b72= Ta5d6ff"Ta5d6fffilter_textTa5d6ff"
Tb4b4b4}
Tb4b4b4}
Tff7b72data Tff7b72class T56d364NodesUiStateTb4b4b4(
Tff7b72val Te6edf3sortTb4b4b4: Te6edf3NodeSortOption Tff7b72= Te6edf3NodeSortOptionTb4b4b4.Te6edf3LAST_HEARDTb4b4b4,
Tff7b72val Te6edf3filterTb4b4b4: Te6edf3NodeFilterState Tff7b72= Te6edf3NodeFilterStateTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3distanceUnitsTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Tff7b72val Te6edf3tempInFahrenheitTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4)
Tff7b72data Tff7b72class T56d364NodeFilterStateTb4b4b4(
Tff7b72val Te6edf3filterTextTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tff7b72val Te6edf3includeUnknownTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3excludeInfrastructureTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3onlyOnlineTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3onlyDirectTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3showIgnoredTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3excludeMqttTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4) Tb4b4b4{
T8b949e/** True if any user-applied filter is narrowing the visible node set. */
Tff7b72val Te6edf3isActiveTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3filterTextTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tff7b72|Tff7b72| Te6edf3excludeInfrastructure Tff7b72|Tff7b72| Te6edf3onlyOnline Tff7b72|Tff7b72| Te6edf3onlyDirect Tff7b72|Tff7b72| Te6edf3excludeMqtt
Tb4b4b4}
Tff7b72data Tff7b72class T56d364NodeFilterTogglesTb4b4b4(
Tff7b72val Te6edf3includeUnknownTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3excludeInfrastructureTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3onlyOnlineTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3onlyDirectTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3showIgnoredTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4)
Served by rngit 1.5.0 - Generated in 0.13s